package pers.lc.testDataGenerator.generator;

import pers.lc.testDataGenerator.data.ColumnData;
import pers.lc.testDataGenerator.data.ColumnInfo;
import pers.lc.testDataGenerator.enumeration.RuleEnumConst;
import pers.lc.testDataGenerator.exception.NotFindRuleException;
import pers.lc.testDataGenerator.rule.ColumnRangeRule;
import pers.lc.testDataGenerator.rule.ColumnSetRule;

public class ColumnGenerator {
    public static ColumnInfo generatorByValue(ColumnData columnData){
        return new ColumnInfo(columnData.getColumnName(), columnData.getColumnType(), columnData.getColumnValue());
    }
    public static ColumnInfo generatorSingleBySet(ColumnData columnData){
        ColumnInfo result = new ColumnInfo();
        result.setColumnName(columnData.getColumnName());
        result.setColumnType(columnData.getColumnType());
        if (columnData.getColumnSetRule().getType().equals(RuleEnumConst.ColumnSetRuleEnum.SINGLE_RULE_1.getValue())){
            result.setColumnValue(ColumnSetRule.singleRule1(columnData.getColumnSet()));
        }else {
            throw new NotFindRuleException("找不到的规则类型："+columnData.getColumnSetRule());
        }
        return result;
    }
    public static ColumnInfo generatorSingleByRange(ColumnData columnData){
        ColumnInfo result = new ColumnInfo();
        result.setColumnName(columnData.getColumnName());
        result.setColumnType(columnData.getColumnType());
        if (columnData.getColumnRangeRule().getType().equals(RuleEnumConst.ColumnRangeRuleEnum.SINGLE_RULE_1.getValue())){
            result.setColumnValue(ColumnRangeRule.singleRule1(columnData.getColumnValueFrom(),columnData.getColumnValueTo(),columnData.getColumnType(),columnData.getFormatter()));
        }else {
            throw new NotFindRuleException("找不到的规则类型："+columnData.getColumnRangeRule());
        }
        return result;
    }
    public static ColumnInfo generatorMultiBySet(ColumnData columnData,int count){
        ColumnInfo result = new ColumnInfo();
        result.setColumnName(columnData.getColumnName());
        result.setColumnType(columnData.getColumnType());
        if (columnData.getColumnSetRule().getType().equals(RuleEnumConst.ColumnSetRuleEnum.MULTI_RULE_1.getValue())){
            result.setColumnValue(ColumnSetRule.multiRule1(columnData.getColumnSet()));
        } else if (columnData.getColumnSetRule().getType().equals(RuleEnumConst.ColumnSetRuleEnum.MULTI_RULE_2.getValue())) {
            result.setColumnValue(ColumnSetRule.multiRule2(columnData.getColumnSet(),columnData.getColumnSetRule().getInterval(),count));
        } else {
            throw new NotFindRuleException("找不到的规则类型："+columnData.getColumnRangeRule());
        }
        return result;
    }
    public static ColumnInfo generatorMultiByRange(ColumnData columnData,int count){
        ColumnInfo result = new ColumnInfo();
        result.setColumnName(columnData.getColumnName());
        result.setColumnType(columnData.getColumnType());
        if (columnData.getColumnRangeRule().getType().equals(RuleEnumConst.ColumnRangeRuleEnum.MULTI_RULE_1.getValue())){
            result.setColumnValue(ColumnRangeRule.multiRule1(columnData.getColumnValueFrom(),columnData.getColumnValueTo(),columnData.getColumnType(),columnData.getFormatter()));
        } else if (columnData.getColumnRangeRule().getType().equals(RuleEnumConst.ColumnRangeRuleEnum.MULTI_RULE_2.getValue())) {
            result.setColumnValue(ColumnRangeRule.multiRule2(columnData.getColumnValueFrom(),columnData.getColumnValueTo(),columnData.getColumnType(),columnData.getFormatter(),columnData.getColumnRangeRule().getInterval(),count));
        } else {
            throw new NotFindRuleException("找不到的规则类型："+columnData.getColumnRangeRule());
        }
        return result;
    }
}
